package com.youi.third.wechat.util;

import java.nio.charset.Charset;
import java.security.Key;
import java.security.Security;
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;

/**
 * 敏感数据解密工具
 * @author Administrator
 *
 */
public class WxPKCS7EncoderUtil {
		private static final Charset CHARSET = Charset.forName("utf-8");
	    private static final int BLOCK_SIZE = 32;

	    /**
	     * 获得对明文进行补位填充的字节.
	     *
	     * @param count
	     *            需要进行填充补位操作的明文字节个数
	     * @return 补齐用的字节数组
	     */
	    public static byte[] encode(int count) {
	        // 计算需要填充的位数
	        int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
	        if (amountToPad == 0) {
	            amountToPad = BLOCK_SIZE;
	        }
	        // 获得补位所用的字符
	        char padChr = chr(amountToPad);
	        String tmp = new String();
	        for (int index = 0; index < amountToPad; index++) {
	            tmp += padChr;
	        }
	        return tmp.getBytes(CHARSET);
	    }

	    /**
	     * 删除解密后明文的补位字符
	     *
	     * @param decrypted
	     *            解密后的明文
	     * @return 删除补位字符后的明文
	     */
	    public static byte[] decode(byte[] decrypted) {
	        int pad = decrypted[decrypted.length - 1];
	        if (pad < 1 || pad > 32) {
	            pad = 0;
	        }
	        return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad);
	    }

	    /**
	     * 将数字转化成ASCII码对应的字符，用于对明文进行补码
	     *
	     * @param a
	     *            需要转化的数字
	     * @return 转化得到的字符
	     */
	    public static char chr(int a) {
	        byte target = (byte) (a & 0xFF);
	        return (char) target;
	    }

}
